// ml:run = $bin < input
#include <iostream>
#include <algorithm>
#include <vector>

int const maxn = 200007;
int g[maxn];

struct data { int c, v; };
std::vector<data> da;

int n, k, s, t;

int calc(int len, int v)
{
    if (v < len) return -1;
    if (2 * len <= v) return len;
    auto x = v - len;
    return 2 * len - x;
}

bool judge(int mid)
{
    long long sum = 0;
    for (int i = 1; i <= k + 1; i++) {
        auto t = calc(g[i] - g[i - 1], mid);
        if (t == -1) return false;
        sum += t;
    }
    return sum <= t;
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin >> n >> k >> s >> t;
    da.resize(n);
    int l = 1, r = 0;
    for (int i = 0; i < n; i++) {
        std::cin >> da[i].c >> da[i].v;
        r = std::max(r, da[i].v);
    }
    for (int i = 1; i <= k; i++) std::cin >> g[i];
    std::sort(g + 1, g + k + 1);
    g[k + 1] = s;

    while (l + 1 < r) {
        auto mid = (l + r) / 2;
        if (judge(mid)) r = mid;
        else l = mid;
    }
    if (!judge(r)) { std::cout << "-1\n"; return 0; }

    if (judge(l)) r = l;
    int ans = 1 << 30;
    for (int i = 0; i < n; i++) {
        if (da[i].v >= r) ans = std::min(ans, da[i].c);
    }
    std::cout << ans << "\n";
}

